/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-基础组件封装层-SpringBoot组件封装-缺省实现
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.boot.web.support;

import org.jasypt.encryption.StringEncryptor;

/**
 * 配置文件敏感信息处理器(只用于调试目的)
 * 前提：
 * （1）引入依赖 com.github.ulisesbocchio:jasypt-spring-boot-starter.jar。
 * （2）配置用于加密/解密 的密码，即：jasypt.encryptor.password: 此处API，只用于验证API功能是否可正常使用。
 * （3）替换配置文件中的明文属性值为密文。在yaml中的写法，如下：
 * spring.datasource.password: ENC(密文)
 * （4）补充一点，在com.alibaba.druid.filter.config.ConfigTools下也有类似的api，
 * 目的是为了保护配置文件中的数据库密码不被泄漏。在包 com.alibaba:druid-1.2.15.jar 下面。
 */
public class ConfigHelper {

    private static StringEncryptor encryptor;

    public ConfigHelper(StringEncryptor encryptor) {
        ConfigHelper.encryptor = encryptor;
    }

    /**
     * 对配置文件敏感信息进行加密，调用API生成密文之后，替换配置文件中属性的明文字段值。此处API，只用于验证API功能是否可正常使用。
     * 在yaml中的写法，如下：
     * spring.datasource.password: ENC(密文)
     */
    public static String encrypt(String message) {
        return encryptor.encrypt(message);
    }

    /**
     * 对配置文件敏感信息进行解密，调用API获取明文。此处API，只用于验证API功能是否可正常使用。
     */
    public static String decrypt(String encryptedMessage) {
        return encryptor.decrypt(encryptedMessage);
    }

}
